昨天看完了我們前端偉大的table,而今天的內容,你曾經為了測試,新增三百個帳號嗎?或是挑戰資料庫的極限,發表四百篇文章嗎?那你找對地方了!我們要新增seeder,讓我們創建資料庫的時候,就可以新增預設的資料塞進資料庫,馬上開始今天的seeder!
seeder的資料通常會放在database\seeders
裡面,我們使用php artisan make:seeder UserSeeder
,其中UserSeeder
是檔案名稱,可以看需求更換檔案名稱,
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
class UserSeeder extends Seeder
{
/**
* Run the database seeders.
*/
public function run(): void
{
//
}
}
打開我們的seeder,就會看到這個程式碼,我們要在run()中新增我們會放進資料庫的資料,接著讓我們認識兩種基本的seeder使用方法。
public function run(): void
{
DB::table('users')->insert([
'name' => Str::random(10),
'email' => Str::random(10).'@gmail.com',
'password' => Hash::make('password'),
]);
}
使用->insert()
插入新資料,或是使用->delete()
刪除資料,相關的資料庫指令可以參閱官方文件:https://laravel.com/docs/10.x/queries
public function run(): void
{
User::factory()
->count(50)
->hasPosts(1)
->create();
}
建立50個user,關於factory的函式則是要進入factory的檔案中新增相關的函式。
我們今天實作是使用前者,使用query builder的方法,我們會示範新增一個使用者做為測試用帳號,首先我們使用artisan的指令,php artisan make:seeder UserSeeder
,建立好後開啟檔案,
<?php
namespace Database\Seeders;
use App\Models\User;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Carbon\Carbon;
class UserSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
DB::table('users')->insert([
'name' => 'John',
'email_verified_at' => now(),
'email' => 'John@gmail.com',
'password' => Hash::make('12345678'),
]);
}
}
新增一位名字是John的使用者,特別的是now()這個function在最上方的use新增Carbon\Carbon,這是一個關於時間的引入,這個引入在明天的時間判定也會再次和他見面。而Hash:make存入資料庫的時候雜湊,在使用者登入的時候則是使用雜湊前的密碼登入。
接著我們要啟動seeder加入資料進資料庫,我們打開cmd,在預設php artisan db:seed
的指令,會執行Database\Seeders\DatabaseSeeder
,如果我們要使用其他seeder要在最後加上--class=UserSeeder
定義要使用的seeder。如果我們剛好想重置migrattion,我們可以使用php artisan migrate:fresh --seed
,使用自製的seeder則是加上--seeder=UserSeeder
。
seeder可以製作加資料或是測試資料,在程式測試中重要的一環,也會提高開發過程的效率,今天我們實作seeder的建立和執行,而明天我們會介紹關於活動報名期間的判定,那我們明天見掰掰。